#include "myhead.h"

int main()
{
	int shmid;
	//创建一个有名信号量
	sem_t *semp=sem_open("haha",O_CREAT|O_EXCL,0777,0);
	if(semp==NULL)
	{
		if(errno==EEXIST)  //说明有名信号量已经存在
			semp=sem_open("haha",O_CREAT,0777,0);
		else
		{
			perror("创建有名信号量失败!\n");
			return -1;
		}
	
	}
	//生成键值
	key_t key=ftok("/home/gec",5);
	
	//申请共享内存
	shmid=shmget(key,1024,IPC_CREAT|IPC_EXCL|0777); 
	if(shmid==-1)
	{
		if(errno==EEXIST) //共享内存存在
			shmid=shmget(key,1024,0777);
		else
		{
			perror("申请失败");
			return -1;
		}
	}
	printf("shmid is:%d  key is:%d\n",shmid,key);
	
	//映射得到首地址
	char *start=shmat(shmid,NULL,0);
	
	while(1)
	{
		//对信号量进行p操作，阻塞当前进程
		sem_wait(semp);
		printf("p1发送过来的内容是:%s\n",start);
	}

	//解除映射
	shmdt(start);
	//删除共享内存
	shmctl(shmid,IPC_RMID,NULL);

}